#include "StdAfx.h"
#include "Skeleton.h"
#include "Animation.h"

namespace rkt
{
	Skeleton::~Skeleton()
	{
		STLDeleteSequence(m_vBones);
	}

	Skeleton::Skeleton()
	{
	}

	uint	Skeleton::getBoneCount() const
	{
		return m_vBones.size();
	}

	Bone*	Skeleton::getBone(ushort index) const
	{
		if(index < m_vBones.size())return m_vBones[index];

		return 0;
	}

	Bone*	Skeleton::getBone(const char *name) const
	{
		size_t size = m_vBones.size();
		for(size_t i = 0;i < size;i++)
		{
			if(StringHelper::casecmp(m_vBones[i]->getName(),name) == 0)return m_vBones[i];
		}

		return 0;
	}

	void 	Skeleton::calcMatrix(IRenderSystem *pRenderSystem,AnimationTime* pTime,int rangeIndex)
	{
		size_t size = m_vBones.size();
		for(size_t i = 0;i < size;i++)
		{
			m_vBones[i]->setNotCalculated();
		}
		for(size_t i = 0;i < size;i++)
		{
			m_vBones[i]->calcMatrix(pRenderSystem,pTime,rangeIndex);
		}
	}

	Bone*	Skeleton::createBone(ModelNode *pNode)
	{
		Bone *pBone = new Bone(pNode);
		m_vBones.push_back(pBone);

		return pBone;
	}

	void Skeleton::reset()
	{
		STLDeleteSequence( m_vBones );		
	}

	/*int Skeleton::addKeyFrameRange(const KeyFrameTimeRange& keyFrameTimeRange)
	{
		int rangeIndex = -1;
		size_t size = m_vBones.size();
		for(size_t i = 0;i < size;i++)
		{
			rangeIndex = m_vBones[i]->addKeyFrameRange(keyFrameTimeRange);
		}

		return rangeIndex;
	}*/
}